package cn.kpi.service.usualassessment.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;

import cn.kpi.dao.usualassessment.UsAssTemplateDao;
import cn.kpi.entity.usualassessment.UsAssTempCreateIndexEntity;
import cn.kpi.entity.usualassessment.UsAssTemplateEntity;
import cn.kpi.entity.usualassessment.UsAssTemplateIndexEntity;
import cn.kpi.service.usualassessment.IUsAssTemplateService;

@Service
public class UsAssTemplateServiceImpl implements IUsAssTemplateService {
	@Autowired
	private UsAssTemplateDao usAssTemplateDao;

	public int InsertTemplateEntity(UsAssTemplateEntity entity) throws Exception {
		try {
			return usAssTemplateDao.InsertTemplateEntity(entity);
		} catch (Exception ex) {
			ex.printStackTrace();
			return -1;
		}
	}

	@Transactional
	public int InsertTemplateIndexentity(UsAssTemplateIndexEntity entity) throws Exception {
		try {
			int result=0;
			if(entity.getParentid()>0){
				result+=usAssTemplateDao.UpdateParentscore(entity.getParentid(), entity.getScore());
			}
			result+=usAssTemplateDao.InsertTemplateIndexentity(entity);
			return result;

		} catch (Exception ex) {
			ex.printStackTrace();
			TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
			return -1;
		}
	}
	public List<UsAssTemplateIndexEntity> GetTemplateIndexListByWhere(String where)throws Exception{
		try {
			return usAssTemplateDao.GetTemplateIndexListByWhere(where);

		} catch (Exception ex) {
			ex.printStackTrace();
			return null;
		}
	}
	public List<UsAssTemplateIndexEntity> GetTemplateIndexListRowSpan()throws Exception{
		try {
			return usAssTemplateDao.GetTemplateIndexListRowSpan();

		} catch (Exception ex) {
			ex.printStackTrace();
			return null;
		}
	}
	public List<UsAssTemplateIndexEntity> GetTemplateIndexListRowSpanByTempId(Long templateid)throws Exception{
		try {
			return usAssTemplateDao.GetTemplateIndexListRowSpanByTempId(templateid);

		} catch (Exception ex) {
			ex.printStackTrace();
			return null;
		}
	}
	
	@Transactional
	public int CreateTemplateAndIndex(List<UsAssTempCreateIndexEntity> lst,UsAssTemplateEntity entity)throws Exception{
		try{
			int result=usAssTemplateDao.InsertTemplateEntity(entity);
			Long tempid=entity.getTemplateid();
			for(int i=0;i<lst.size();i++){
				lst.get(i).setTemplateid(tempid);
			}
			result+=usAssTemplateDao.InsertTempCreateIndexBatch(lst);
			if(result<=0){
				TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//回滚事物 
				return -1;
			}
			return result;
			
		}
		catch (Exception ex) {
			ex.printStackTrace();
			return -1;
		}
	}
	
	@Transactional
	public int UpdateUsAssTempEntity(List<UsAssTempCreateIndexEntity> lst,UsAssTemplateEntity entity)throws Exception{
		try{
			int result=usAssTemplateDao.UpdateUsAssTempEntity(entity);
			//result+=usAssTemplateDao.UpdateTempCreateIndexBatch(lst);
			result+=usAssTemplateDao.DeleteUsTempCreateIndexEntity(entity.getTemplateid());
			result+=usAssTemplateDao.InsertTempCreateIndexBatch(lst);
			if(result<=0){
				TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//回滚事物 
				return -1;
			}
			return result;
			
		}
		catch (Exception ex) {
			ex.printStackTrace();
			return -1;
		}
	}
	
	public List<UsAssTemplateEntity> GetUsAssTemplateListByWhere(String where)throws Exception{
		try {
			return usAssTemplateDao.GetUsAssTemplateListByWhere(where);

		} catch (Exception ex) {
			ex.printStackTrace();
			return null;
		}
	}
	public int GetUsAssTemplateListCountByWhere(String where)throws Exception{
		try {
			return usAssTemplateDao.GetUsAssTemplateListCountByWhere(where);

		} catch (Exception ex) {
			ex.printStackTrace();
			return -1;
		}
	}
	
	@Transactional
	public int DeleteUsTempEntity(Long templateid)throws Exception{
		try {
			int result=usAssTemplateDao.DeleteUsTempCreateIndexEntity(templateid);
			result+=usAssTemplateDao.DeleteUsTempEntity(templateid);
			if(result<=0){
				TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//回滚事物 
				return -1;
			}
			return result;

		} catch (Exception ex) {
			ex.printStackTrace();
			return -1;
		}
	}
	
	public List<UsAssTempCreateIndexEntity> GetTemplateCreateIndexListRowSpan(Long templateid)throws Exception{
		try {
			return usAssTemplateDao.GetTemplateCreateIndexListRowSpan(templateid);

		} catch (Exception ex) {
			ex.printStackTrace();
			return null;
		}
	}
	public UsAssTemplateEntity GetUsAssTemplateListById(Long templateid)throws Exception{
		try {
			return usAssTemplateDao.GetUsAssTemplateListById(templateid);

		} catch (Exception ex) {
			ex.printStackTrace();
			return null;
		}
	}
	
//	@Transactional
//	public int CreateTemplate(List<UsAssTempCreateIndexEntity> lst,UsAssTemplateEntity entity)throws Exception{
//		try{
//			int result=usAssTemplateDao.InsertTemplateEntity(entity);
//			System.out.println(entity.getTemplateid());
//			return -1;
//			//TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();回滚事物 
//		}
//		catch (Exception ex) {
//			ex.printStackTrace();
//			return -1;
//		}
//	}
	
	public List<UsAssTempCreateIndexEntity> GetIndexListByWhere(String where)throws Exception{
		try{
			return usAssTemplateDao.GetIndexListByWhere(where);
		}
		catch(Exception ex){
			ex.printStackTrace();
			return null;
		}
	}
	public int GetIndexListCountByWhere(String where)throws Exception{
		try{
			return usAssTemplateDao.GetIndexListCountByWhere(where);
		}
		catch(Exception ex){
			ex.printStackTrace();
			return -1;
		}
	}
	@Transactional
	public int DeleteIndex(Long assindexid,Long parentid)throws Exception
	{
		try{
			int result=0;
			int score=GetIndexById(assindexid).getScore();
			result+=usAssTemplateDao.UpdateParentscore(parentid, (0-score));
			result+=usAssTemplateDao.DeleteIndex(assindexid,parentid);
			return result;
		}
		catch(Exception ex){
			ex.printStackTrace();
			TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
			return -1;
		}
	}
	public int UpdateIndex(UsAssTemplateIndexEntity entity)throws Exception{
		try{
			return usAssTemplateDao.UpdateIndex(entity);
		}
		catch(Exception ex){
			ex.printStackTrace();
			return -1;
		}
	}
	public UsAssTemplateIndexEntity GetIndexById(Long assindexid)throws Exception{
		try{
			return usAssTemplateDao.GetIndexById(assindexid);
		}
		catch(Exception ex){
			ex.printStackTrace();
			return null;
		}
	}
	
	public List<UsAssTemplateIndexEntity> GetTemplateIndexListRowSpanByTempIdAndWhere(Long templateid,String where)throws Exception{
		try{
			return usAssTemplateDao.GetTemplateIndexListRowSpanByTempIdAndWhere(templateid,where);
		}
		catch(Exception ex){
			ex.printStackTrace();
			return null;
		}
	}
}
